package com.ext.aic.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class ImageCopyUtils {
    /**
     * 复制目录下所有图片到目标目录
     *
     * @param srcDir  源目录路径（如：/sdcard/Pictures/Source）
     * @param destDir 目标目录路径（如：/sdcard/Pictures/Destination）
     * @return 是否成功
     */
    public static boolean copyImages(File srcDir, File destDir) {
        // 1. 检查目录有效性
        if (!srcDir.exists() || !srcDir.isDirectory()) return false;
        if (!destDir.exists() && !destDir.mkdirs()) return false;

        // 2. 遍历源目录
        File[] files = srcDir.listFiles();
        if (files == null) return false;

        for (File file : files) {
            if (isImageFile(file)) { // 过滤图片文件
                File destFile = new File(destDir, file.getName());
                try {
                    copyFile(file, destFile); // 执行复制
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * 判断是否为图片文件
     */
    private static boolean isImageFile(File file) {
        String name = file.getName().toLowerCase();
        return name.endsWith(".jpg") ||
                name.endsWith(".jpeg") ||
                name.endsWith(".png") ||
                name.endsWith(".gif");
    }

    /**
     * 使用NIO高效复制文件
     */
    private static void copyFile(File src, File dest) throws IOException {
        try (FileChannel inChannel = new FileInputStream(src).getChannel();
             FileChannel outChannel = new FileOutputStream(dest).getChannel()) {
            inChannel.transferTo(0, inChannel.size(), outChannel);
        }
    }
}
